package com.yuw.action;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.yuw.bean.AdminInfoBean;
import com.yuw.bean.AdminInfoCollectionBean;
import com.yuw.service.ILoginService;

@Controller
public class LoginAction {

	// 依赖注入【反转控制】
	// 面向接口的编程
	@Resource
	private ILoginService loginS;// 按名称匹配进行注入

	/**
	 * 使用pojo实体类进行映射，要求，实体类的属性名和form表单的name属性值保存一致；
	 * 另外，form表单时的name值直接写实体类对应的属性变量名即可，不需要加前缀；
	 */
	@RequestMapping(value = "/LoginActionList", method = RequestMethod.POST)
	public String dologinList(AdminInfoCollectionBean adminInfoCollectionB) {
		// 调用service层进行登录业务逻辑处理
		if (adminInfoCollectionB != null && adminInfoCollectionB.getLstAdminInfos() != null) {
			// 遍历实体类的集合属性的值
			for (AdminInfoBean adminB : adminInfoCollectionB.getLstAdminInfos()) {
				System.out.println("用户名：" + adminB.getAdminname());
				System.out.println("密码：" + adminB.getAdminpsw());
			}
		} else {
			System.out.println("数据映射错误");

		}
		// 调用service层的业务逻辑处理
		loginS.queryLoginInfo(null);
		// 返回值是view的映射路径
		// 注意：返回的路径是剔除前缀和后缀之后的内容：
		// 例如返回视图页面的路径是：/WEB-INF/pages/logined.jsp，则只需要返回 logined即可
		return ("logined");
	}

	/**
	 * 使用pojo实体类进行映射，要求，实体类的属性名和form表单的name属性值保存一致；
	 * 另外，form表单时的name值直接写实体类对应的属性变量名即可，不需要加前缀；
	 */
	@RequestMapping("/LoginAction3")
	public ModelAndView dologin3(AdminInfoBean adminB) {
		
		ModelAndView mav = new ModelAndView();
		// 调用service层进行登录业务逻辑处理
		System.out.println("用户名：" + adminB.getAdminname());
		System.out.println("密码：" + adminB.getAdminpsw());
		// 调用service层的业务逻辑处理
		loginS.queryLoginInfo(null);
		// 返回值是view的映射路径
		// 注意：返回的路径是剔除前缀和后缀之后的内容：
		// 例如返回视图页面的路径是：/WEB-INF/pages/logined.jsp，则只需要返回 logined即可
		
		// 添加view信息
		mav.setViewName("logined");
		
		// 添加model（类似于session等缓存的数据结构），是一个map集合
		mav.addObject("adminB", adminB);
		
		return mav;
	}
	
	/**
	 * 使用pojo实体类进行映射，要求，实体类的属性名和form表单的name属性值保存一致；
	 * 另外，form表单时的name值直接写实体类对应的属性变量名即可，不需要加前缀；
	 */
	@RequestMapping("/LoginAction2")
	public String dologin2(AdminInfoBean adminB) {
		// 调用service层进行登录业务逻辑处理
		System.out.println("用户名：" + adminB.getAdminname());
		System.out.println("密码：" + adminB.getAdminpsw());
		// 调用service层的业务逻辑处理
		loginS.queryLoginInfo(null);
		// 返回值是view的映射路径
		// 注意：返回的路径是剔除前缀和后缀之后的内容：
		// 例如返回视图页面的路径是：/WEB-INF/pages/logined.jsp，则只需要返回 logined即可
		return ("logined");
	}

	/**
	 * 数据映射要求，形参变量名或者是@RequestParam注解中的参数名和form表单中的name属性值保持一致；
	 * 如果使用@RequestParam，则形参可以不用和form表单name属性值保持一致，但是@RequestParam中的参数需要保持一致
	 * action响应方法的形参类型推荐使用包装类类型，可以兼容null
	 */
	@RequestMapping("/LoginAction")
	public String dologin(@RequestParam(name="adminname",required=false,defaultValue="admin") String adminname2, String adminpsw) {
		// 调用service层进行登录业务逻辑处理
		System.out.println("用户名：" + adminname2);
		System.out.println("密码：" + adminpsw);
		// 调用service层的业务逻辑处理
		loginS.queryLoginInfo(null);
		// 返回值是view的映射路径
		// 注意：返回的路径是剔除前缀和后缀之后的内容：
		// 例如返回视图页面的路径是：/WEB-INF/pages/logined.jsp，则只需要返回 logined即可
		return ("logined");
	}

}
